home *** CD-ROM | disk | FTP | other *** search
- ; -*- Mode: Lisp; Syntax: Common-Lisp; Package: SCHEME-TRANSLATOR; -*-
-
- ; This file was generated by Pseudoscheme 2.8a
- ; running in Lucid Common Lisp 4.0.1
- ; from file /amd/night/b/jar/pseudo/classify.scm
-
- (SCHI:BEGIN-TRANSLATED-FILE)
- (DEFUN CLASSIFY
- (FORM ENV)
- (DECLARE (SPECIAL CLASS/LITERAL
- CLASS/APPLICATION
- CLASS/NAME))
- (IF (SCHI:TRUEP (NAME? FORM))
- (.VALUES CLASS/NAME FORM ENV)
- (IF (CONSP FORM)
- (IF (SCHI:TRUEP (NAME? (CAR FORM)))
- (LET ((DEN (LOOKUP ENV (CAR FORM))))
- (IF (SCHI:TRUEP (SPECIAL-OPERATOR? DEN))
- (LET ((CLASS (SPECIAL-OPERATOR-CLASS DEN)))
- (IF (SCHI:TRUEP
- (CHECK-SPECIAL-FORM-SYNTAX CLASS FORM))
- (.VALUES CLASS FORM ENV)
- (CLASSIFY
- (SYNTAX-ERROR "invalid special form syntax"
- FORM)
- ENV)))
- (IF (SCHI:TRUEP (MACRO? DEN))
- (CLASSIFY-MACRO-APPLICATION DEN FORM ENV)
- (.VALUES CLASS/APPLICATION FORM ENV))))
- (.VALUES CLASS/APPLICATION FORM ENV))
- (IF (SCHI:TRUEP (LITERAL? FORM))
- (.VALUES CLASS/LITERAL FORM ENV)
- (CLASSIFY (SYNTAX-ERROR "unknown expression type"
- FORM)
- ENV)))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'CLASSIFY
- 'SCHEME::CLASSIFY)
- (DEFUN CLASSIFY-MACRO-APPLICATION
- (DEN FORM USE-ENV)
- (LET ((DEF-ENV (MACRO-ENVIRONMENT DEN)))
- (WITH-VALUES #'(LAMBDA NIL
- (MAKE-RENAMER+ENV DEF-ENV USE-ENV))
- #'(LAMBDA (RENAME OUTPUT-ENV)
- (FLET
- ((COMPARE (CLIENT-NAME MACRO-NAME)
- (IF
- (AND (SCHI:TRUEP (NAME? CLIENT-NAME))
- (SCHI:TRUEP (NAME? MACRO-NAME)))
- (SAME-DENOTATION?
- (LOOKUP OUTPUT-ENV CLIENT-NAME)
- (LOOKUP OUTPUT-ENV MACRO-NAME))
- (SCHI:TRUE? (EQ CLIENT-NAME MACRO-NAME)))))
- (LET
- ((NEW-FORM
- (FUNCALL (MACRO-TRANSFORMER DEN) FORM RENAME
- #'COMPARE)))
- (CLASSIFY NEW-FORM OUTPUT-ENV)))))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'CLASSIFY-MACRO-APPLICATION
- 'SCHEME::CLASSIFY-MACRO-APPLICATION)
- (DEFUN PROCESS-SYNTAX-SPEC
- (SSPEC ENV)
- (MAKE-MACRO (EVAL-FOR-SYNTAX SSPEC
- (GET-ENVIRONMENT-FOR-SYNTAX ENV))
- ENV))
- (SCHI:SET-VALUE-FROM-FUNCTION 'PROCESS-SYNTAX-SPEC
- 'SCHEME::PROCESS-SYNTAX-SPEC)
- (DEFUN PROCESS-DEFINE-SYNTAX
- (FORM ENV)
- (DEFINE! ENV
- (CADR FORM)
- (PROCESS-SYNTAX-SPEC (CADDR FORM) ENV)))
- (SCHI:SET-VALUE-FROM-FUNCTION 'PROCESS-DEFINE-SYNTAX
- 'SCHEME::PROCESS-DEFINE-SYNTAX)
- (DEFUN CLASSIFY-LET-SYNTAX
- (FORM ENV)
- (DECLARE (SPECIAL SYNTAX-SPEC-NAME))
- (LET ((DSPECS (LET-SYNTAX-FORM-DSPECS FORM)))
- (CLASSIFY (LET-SYNTAX-FORM-BODY FORM)
- (BIND (MAPCAR SYNTAX-SPEC-NAME DSPECS)
- (MAPCAR
- #'(LAMBDA (DSPEC)
- (PROCESS-SYNTAX-SPEC (SYNTAX-SPEC-FORM DSPEC) ENV))
- DSPECS)
- ENV))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'CLASSIFY-LET-SYNTAX
- 'SCHEME::CLASSIFY-LET-SYNTAX)
- (DEFUN CLASSIFY-LETREC-SYNTAX
- (FORM OUTER-ENV)
- (LET ((NEW (NEW-ENVIRONMENT OUTER-ENV)))
- (MAPC
- #'(LAMBDA (DSPEC)
- (DEFINE! NEW (SYNTAX-SPEC-NAME DSPEC)
- (PROCESS-SYNTAX-SPEC (SYNTAX-SPEC-FORM DSPEC) NEW)))
- (LETREC-SYNTAX-FORM-DSPECS FORM))
- (CLASSIFY (LETREC-SYNTAX-FORM-BODY FORM)
- NEW)))
- (SCHI:SET-VALUE-FROM-FUNCTION 'CLASSIFY-LETREC-SYNTAX
- 'SCHEME::CLASSIFY-LETREC-SYNTAX)
- (DEFUN LOOKUP
- (ENV NAME)
- (IF (SCHI:TRUEP (LOCAL-ENVIRONMENT? ENV))
- (LET ((PROBE
- (SCHI:TRUE?
- (ASSOC NAME
- (LOCAL-ENVIRONMENT-BINDINGS ENV)
- :TEST
- #'EQ))))
- (IF (SCHI:TRUEP PROBE)
- (CDR PROBE)
- (LOOKUP (LOCAL-ENVIRONMENT-PARENT ENV)
- NAME)))
- (IF (SCHI:TRUEP (DIVERTED-ENVIRONMENT? ENV))
- (IF (AND (SCHI:TRUEP (GENERATED? NAME))
- (SCHI:TRUEP
- (SAME-GENERATION? (GENERATED-GENERATION NAME)
- (DIVERTED-ENVIRONMENT-GENERATION
- ENV))))
- (LOOKUP (DIVERTED-ENVIRONMENT-MACRO-ENV ENV)
- (GENERATED-NAME NAME))
- (LOOKUP (DIVERTED-ENVIRONMENT-PARENT ENV)
- NAME))
- (CLIENT-LOOKUP ENV NAME))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'LOOKUP 'SCHEME::LOOKUP)
- (DEFUN DEFINE!
- (ENV NAME DENOTATION)
- (IF (SCHI:TRUEP (LOCAL-ENVIRONMENT? ENV))
- (LET ((BS (LOCAL-ENVIRONMENT-BINDINGS ENV)))
- (LET ((PROBE (SCHI:TRUE? (ASSOC NAME BS :TEST #'EQ))))
- (IF (SCHI:TRUEP PROBE)
- (PROGN (SETF (CDR PROBE) DENOTATION)
- SCHI:UNSPECIFIED)
- (SET-LOCAL-ENVIRONMENT-BINDINGS! ENV
- (CONS
- (CONS NAME DENOTATION)
- BS)))))
- (IF (SCHI:TRUEP (DIVERTED-ENVIRONMENT? ENV))
- (DEFINE! (DIVERTED-ENVIRONMENT-PARENT ENV)
- NAME
- DENOTATION)
- (CLIENT-DEFINE! ENV NAME DENOTATION))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'DEFINE! 'SCHEME::DEFINE!)
- (LOCALLY (DECLARE (SPECIAL LOCAL-ENVIRONMENT-RTD))
- (SETQ LOCAL-ENVIRONMENT-RTD (MAKE-RECORD-TYPE
- 'SCHEME::LOCAL-ENVIRONMENT
- '(SCHEME::PARENT SCHEME::BINDINGS))))
- (SCHI:SET-FUNCTION-FROM-VALUE 'LOCAL-ENVIRONMENT-RTD
- 'SCHEME::LOCAL-ENVIRONMENT-RTD)
- (LOCALLY (DECLARE (SPECIAL MAKE-LOCAL-ENVIRONMENT
- LOCAL-ENVIRONMENT-RTD))
- (SETQ MAKE-LOCAL-ENVIRONMENT (RECORD-CONSTRUCTOR LOCAL-ENVIRONMENT-RTD
- '(SCHEME::PARENT
- SCHEME::BINDINGS)))
- )
- (SCHI:SET-FUNCTION-FROM-VALUE 'MAKE-LOCAL-ENVIRONMENT
- 'SCHEME::MAKE-LOCAL-ENVIRONMENT)
- (LOCALLY (DECLARE (SPECIAL LOCAL-ENVIRONMENT?
- LOCAL-ENVIRONMENT-RTD))
- (SETQ LOCAL-ENVIRONMENT? (RECORD-PREDICATE LOCAL-ENVIRONMENT-RTD)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'LOCAL-ENVIRONMENT?
- 'SCHEME::LOCAL-ENVIRONMENT?)
- (LOCALLY (DECLARE (SPECIAL LOCAL-ENVIRONMENT-PARENT
- LOCAL-ENVIRONMENT-RTD))
- (SETQ LOCAL-ENVIRONMENT-PARENT (RECORD-ACCESSOR LOCAL-ENVIRONMENT-RTD
- 'SCHEME::PARENT)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'LOCAL-ENVIRONMENT-PARENT
- 'SCHEME::LOCAL-ENVIRONMENT-PARENT)
- (LOCALLY (DECLARE (SPECIAL LOCAL-ENVIRONMENT-BINDINGS
- LOCAL-ENVIRONMENT-RTD))
- (SETQ LOCAL-ENVIRONMENT-BINDINGS (RECORD-ACCESSOR
- LOCAL-ENVIRONMENT-RTD
- 'SCHEME::BINDINGS)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'LOCAL-ENVIRONMENT-BINDINGS
- 'SCHEME::LOCAL-ENVIRONMENT-BINDINGS)
- (LOCALLY
- (DECLARE (SPECIAL SET-LOCAL-ENVIRONMENT-BINDINGS!
- LOCAL-ENVIRONMENT-RTD))
- (SETQ SET-LOCAL-ENVIRONMENT-BINDINGS! (RECORD-MODIFIER LOCAL-ENVIRONMENT-RTD
- 'SCHEME::BINDINGS)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'SET-LOCAL-ENVIRONMENT-BINDINGS!
- 'SCHEME::SET-LOCAL-ENVIRONMENT-BINDINGS!)
- (LOCALLY (DECLARE (SPECIAL DIVERTED-ENVIRONMENT-RTD))
- (SETQ DIVERTED-ENVIRONMENT-RTD (MAKE-RECORD-TYPE
- 'SCHEME::DIVERTED-ENVIRONMENT
- '(SCHEME::PARENT SCHEME::GENERATION
- SCHEME::MACRO-ENV))))
- (SCHI:SET-FUNCTION-FROM-VALUE 'DIVERTED-ENVIRONMENT-RTD
- 'SCHEME::DIVERTED-ENVIRONMENT-RTD)
- (LOCALLY (DECLARE (SPECIAL MAKE-DIVERTED-ENVIRONMENT
- DIVERTED-ENVIRONMENT-RTD))
- (SETQ MAKE-DIVERTED-ENVIRONMENT (RECORD-CONSTRUCTOR
- DIVERTED-ENVIRONMENT-RTD
- '(SCHEME::GENERATION
- SCHEME::MACRO-ENV SCHEME::PARENT)))
- )
- (SCHI:SET-FUNCTION-FROM-VALUE 'MAKE-DIVERTED-ENVIRONMENT
- 'SCHEME::MAKE-DIVERTED-ENVIRONMENT)
- (LOCALLY (DECLARE (SPECIAL DIVERTED-ENVIRONMENT?
- DIVERTED-ENVIRONMENT-RTD))
- (SETQ DIVERTED-ENVIRONMENT? (RECORD-PREDICATE DIVERTED-ENVIRONMENT-RTD))
- )
- (SCHI:SET-FUNCTION-FROM-VALUE 'DIVERTED-ENVIRONMENT?
- 'SCHEME::DIVERTED-ENVIRONMENT?)
- (LOCALLY
- (DECLARE (SPECIAL DIVERTED-ENVIRONMENT-PARENT
- DIVERTED-ENVIRONMENT-RTD))
- (SETQ DIVERTED-ENVIRONMENT-PARENT (RECORD-ACCESSOR DIVERTED-ENVIRONMENT-RTD
- 'SCHEME::PARENT)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'DIVERTED-ENVIRONMENT-PARENT
- 'SCHEME::DIVERTED-ENVIRONMENT-PARENT)
- (LOCALLY
- (DECLARE (SPECIAL DIVERTED-ENVIRONMENT-GENERATION
- DIVERTED-ENVIRONMENT-RTD))
- (SETQ DIVERTED-ENVIRONMENT-GENERATION (RECORD-ACCESSOR
- DIVERTED-ENVIRONMENT-RTD
- 'SCHEME::GENERATION)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'DIVERTED-ENVIRONMENT-GENERATION
- 'SCHEME::DIVERTED-ENVIRONMENT-GENERATION)
- (LOCALLY
- (DECLARE (SPECIAL DIVERTED-ENVIRONMENT-MACRO-ENV
- DIVERTED-ENVIRONMENT-RTD))
- (SETQ DIVERTED-ENVIRONMENT-MACRO-ENV (RECORD-ACCESSOR
- DIVERTED-ENVIRONMENT-RTD
- 'SCHEME::MACRO-ENV)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'DIVERTED-ENVIRONMENT-MACRO-ENV
- 'SCHEME::DIVERTED-ENVIRONMENT-MACRO-ENV)
- (DEFUN BIND
- (NAMES DENOTATIONS OUTER-ENV)
- (MAKE-LOCAL-ENVIRONMENT OUTER-ENV
- (MAPCAR #'CONS NAMES DENOTATIONS)))
- (SCHI:SET-VALUE-FROM-FUNCTION 'BIND 'SCHEME::BIND)
- (DEFUN NEW-ENVIRONMENT
- (OUTER-ENV)
- (MAKE-LOCAL-ENVIRONMENT OUTER-ENV 'NIL))
- (SCHI:SET-VALUE-FROM-FUNCTION 'NEW-ENVIRONMENT
- 'SCHEME::NEW-ENVIRONMENT)
- (DEFUN FOR-EACH-LOCAL
- (PROC ENV)
- (FLET
- ((DOIT (NAME+DEN)
- (LET ((DEN (CDR NAME+DEN)))
- (IF (AND (NOT (SCHI:TRUEP (MACRO? DEN)))
- (NOT (SCHI:TRUEP (SPECIAL-OPERATOR? DEN))))
- (FUNCALL PROC DEN)))))
- (PROG (ENV@0)
- (SETQ ENV@0 ENV)
- (GO .LOOP)
- .LOOP (IF (SCHI:TRUEP (LOCAL-ENVIRONMENT? ENV@0))
- (PROGN (MAPC #'DOIT
- (LOCAL-ENVIRONMENT-BINDINGS ENV@0))
- (SETQ ENV@0 (LOCAL-ENVIRONMENT-PARENT ENV@0))
- (GO .LOOP))
- (IF (SCHI:TRUEP (DIVERTED-ENVIRONMENT? ENV@0))
- (PROGN
- (SETQ ENV@0 (DIVERTED-ENVIRONMENT-PARENT ENV@0))
- (GO .LOOP))
- (RETURN SCHI:UNSPECIFIED))))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'FOR-EACH-LOCAL
- 'SCHEME::FOR-EACH-LOCAL)
- (LOCALLY (DECLARE (SPECIAL SAME-DENOTATION? EQ?))
- (SETQ SAME-DENOTATION? EQ?))
- (SCHI:SET-FUNCTION-FROM-VALUE 'SAME-DENOTATION?
- 'SCHEME::SAME-DENOTATION?)
- (LOCALLY (DECLARE (SPECIAL TYPE/SPECIAL-OPERATOR))
- (SETQ TYPE/SPECIAL-OPERATOR (MAKE-RECORD-TYPE "Special operator"
- '(SCHEME::CLASS))))
- (SCHI:SET-FUNCTION-FROM-VALUE 'TYPE/SPECIAL-OPERATOR
- 'SCHEME::TYPE/SPECIAL-OPERATOR)
- (LOCALLY (DECLARE (SPECIAL MAKE-SPECIAL-OPERATOR
- TYPE/SPECIAL-OPERATOR))
- (SETQ MAKE-SPECIAL-OPERATOR (RECORD-CONSTRUCTOR TYPE/SPECIAL-OPERATOR
- '(SCHEME::CLASS))))
- (SCHI:SET-FUNCTION-FROM-VALUE 'MAKE-SPECIAL-OPERATOR
- 'SCHEME::MAKE-SPECIAL-OPERATOR)
- (LOCALLY (DECLARE (SPECIAL SPECIAL-OPERATOR?
- TYPE/SPECIAL-OPERATOR))
- (SETQ SPECIAL-OPERATOR? (RECORD-PREDICATE TYPE/SPECIAL-OPERATOR)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'SPECIAL-OPERATOR?
- 'SCHEME::SPECIAL-OPERATOR?)
- (LOCALLY (DECLARE (SPECIAL SPECIAL-OPERATOR-CLASS
- TYPE/SPECIAL-OPERATOR))
- (SETQ SPECIAL-OPERATOR-CLASS (RECORD-ACCESSOR TYPE/SPECIAL-OPERATOR
- 'SCHEME::CLASS)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'SPECIAL-OPERATOR-CLASS
- 'SCHEME::SPECIAL-OPERATOR-CLASS)
- (LOCALLY (DECLARE (SPECIAL TYPE/MACRO))
- (SETQ TYPE/MACRO (MAKE-RECORD-TYPE "Macro"
- '(SCHEME::PROC SCHEME::ENV))))
- (SCHI:SET-FUNCTION-FROM-VALUE 'TYPE/MACRO
- 'SCHEME::TYPE/MACRO)
- (LOCALLY (DECLARE (SPECIAL MAKE-MACRO TYPE/MACRO))
- (SETQ MAKE-MACRO (RECORD-CONSTRUCTOR TYPE/MACRO
- '(SCHEME::PROC SCHEME::ENV))))
- (SCHI:SET-FUNCTION-FROM-VALUE 'MAKE-MACRO
- 'SCHEME::MAKE-MACRO)
- (LOCALLY (DECLARE (SPECIAL MACRO? TYPE/MACRO))
- (SETQ MACRO? (RECORD-PREDICATE TYPE/MACRO)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'MACRO? 'SCHEME::MACRO?)
- (LOCALLY (DECLARE (SPECIAL MACRO-TRANSFORMER
- TYPE/MACRO))
- (SETQ MACRO-TRANSFORMER (RECORD-ACCESSOR TYPE/MACRO
- 'SCHEME::PROC)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'MACRO-TRANSFORMER
- 'SCHEME::MACRO-TRANSFORMER)
- (LOCALLY (DECLARE (SPECIAL MACRO-ENVIRONMENT
- TYPE/MACRO))
- (SETQ MACRO-ENVIRONMENT (RECORD-ACCESSOR TYPE/MACRO
- 'SCHEME::ENV)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'MACRO-ENVIRONMENT
- 'SCHEME::MACRO-ENVIRONMENT)
- (DEFUN NAME?
- (THING)
- (OR (SCHI:SCHEME-SYMBOL-P THING)
- (GENERATED? THING)))
- (SCHI:SET-VALUE-FROM-FUNCTION 'NAME? 'SCHEME::NAME?)
- (LOCALLY (DECLARE (SPECIAL SAME-NAME? EQ?))
- (SETQ SAME-NAME? EQ?))
- (SCHI:SET-FUNCTION-FROM-VALUE 'SAME-NAME?
- 'SCHEME::SAME-NAME?)
- (LOCALLY (DECLARE (SPECIAL NAME-MEMBER MEMQ))
- (SETQ NAME-MEMBER MEMQ))
- (SCHI:SET-FUNCTION-FROM-VALUE 'NAME-MEMBER
- 'SCHEME::NAME-MEMBER)
- (LOCALLY (DECLARE (SPECIAL NAME-ASSOC ASSQ))
- (SETQ NAME-ASSOC ASSQ))
- (SCHI:SET-FUNCTION-FROM-VALUE 'NAME-ASSOC
- 'SCHEME::NAME-ASSOC)
- (DEFUN NAME->SYMBOL
- (NAME)
- (IF (SCHI:SCHEME-SYMBOL-P NAME)
- NAME
- (VALUES (INTERN (NAME->STRING NAME)
- SCHI:SCHEME-PACKAGE))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'NAME->SYMBOL
- 'SCHEME::NAME->SYMBOL)
- (DEFUN NAME->STRING
- (NAME)
- (IF (SCHI:SCHEME-SYMBOL-P NAME)
- (SYMBOL->STRING NAME)
- (STRING-APPEND "."
- (NAME->STRING (GENERATED-NAME NAME))
- "."
- (NUMBER->STRING (GENERATED-GENERATION NAME)))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'NAME->STRING
- 'SCHEME::NAME->STRING)
- (LOCALLY (DECLARE (SPECIAL TYPE/GENERATED))
- (SETQ TYPE/GENERATED (MAKE-RECORD-TYPE "Generated"
- '(SCHEME::NAME
- SCHEME::GENERATION))))
- (SCHI:SET-FUNCTION-FROM-VALUE 'TYPE/GENERATED
- 'SCHEME::TYPE/GENERATED)
- (LOCALLY (DECLARE (SPECIAL MAKE-GENERATED
- TYPE/GENERATED))
- (SETQ MAKE-GENERATED (RECORD-CONSTRUCTOR TYPE/GENERATED
- '(SCHEME::NAME
- SCHEME::GENERATION))))
- (SCHI:SET-FUNCTION-FROM-VALUE 'MAKE-GENERATED
- 'SCHEME::MAKE-GENERATED)
- (LOCALLY (DECLARE (SPECIAL GENERATED? TYPE/GENERATED))
- (SETQ GENERATED? (RECORD-PREDICATE TYPE/GENERATED)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'GENERATED?
- 'SCHEME::GENERATED?)
- (LOCALLY (DECLARE (SPECIAL GENERATED-NAME
- TYPE/GENERATED))
- (SETQ GENERATED-NAME (RECORD-ACCESSOR TYPE/GENERATED
- 'SCHEME::NAME)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'GENERATED-NAME
- 'SCHEME::GENERATED-NAME)
- (LOCALLY (DECLARE (SPECIAL GENERATED-GENERATION
- TYPE/GENERATED))
- (SETQ GENERATED-GENERATION (RECORD-ACCESSOR TYPE/GENERATED
- 'SCHEME::GENERATION)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'GENERATED-GENERATION
- 'SCHEME::GENERATED-GENERATION)
- (DEFUN STRIP
- (THING)
- (IF (SCHI:TRUEP (GENERATED? THING))
- (STRIP (GENERATED-NAME THING))
- (IF (CONSP THING)
- (LET ((X (STRIP (CAR THING)))
- (Y (STRIP (CDR THING))))
- (IF (AND (EQ X (CAR THING))
- (EQ Y (CDR THING)))
- THING
- (CONS X Y)))
- (IF (SCHI:TRUEP (VECTOR? THING))
- (LET ((NEW (MAKE-VECTOR (LENGTH (THE SIMPLE-VECTOR
- THING)))))
- (PROG (I@0 SAME?@1)
- (PSETQ I@0 0 SAME?@1 SCHI:TRUE)
- (GO .LOOP)
- .LOOP (LET ((I I@0)
- (SAME? SAME?@1))
- (IF (>= I
- (LENGTH (THE SIMPLE-VECTOR THING)))
- (IF (SCHI:TRUEP SAME?)
- (RETURN THING)
- (RETURN NEW))
- (LET ((X (STRIP (SVREF THING I))))
- (SETF (SVREF NEW I) X)
- SCHI:UNSPECIFIED
- (PSETQ I@0
- (+ I 1)
- SAME?@1
- (IF (SCHI:TRUEP SAME?)
- (SCHI:TRUE?
- (EQ X
- (SVREF THING I)))
- SCHI:FALSE))
- (GO .LOOP))))))
- THING))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'STRIP 'SCHEME::STRIP)
- (LOCALLY (DECLARE (SPECIAL *GENERATION*))
- (SETQ *GENERATION* 1))
- (SCHI:SET-FORWARDING-FUNCTION '*GENERATION*
- 'SCHEME::*GENERATION*)
- (DEFUN NEW-GENERATION
- NIL
- (DECLARE (SPECIAL *GENERATION*))
- (SETQ *GENERATION* (+ *GENERATION* 1))
- *GENERATION*)
- (SCHI:SET-VALUE-FROM-FUNCTION 'NEW-GENERATION
- 'SCHEME::NEW-GENERATION)
- (LOCALLY (DECLARE (SPECIAL SAME-GENERATION? .=))
- (SETQ SAME-GENERATION? .=))
- (SCHI:SET-FUNCTION-FROM-VALUE 'SAME-GENERATION?
- 'SCHEME::SAME-GENERATION?)
- (DEFUN MAKE-RENAMER+ENV
- (MACRO-ENV CLIENT-ENV)
- (LET ((ALIST 'NIL)
- (GENERATION (NEW-GENERATION)))
- (.VALUES
- #'(LAMBDA (NAME)
- (LET ((PROBE (SCHI:TRUE? (ASSOC NAME ALIST :TEST #'EQ))))
- (IF (SCHI:TRUEP PROBE) (CDR PROBE)
- (LET ((NEW-NAME (MAKE-GENERATED NAME GENERATION)))
- (SETQ ALIST (CONS (CONS NAME NEW-NAME) ALIST)) NEW-NAME))))
- (MAKE-DIVERTED-ENVIRONMENT GENERATION MACRO-ENV CLIENT-ENV))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'MAKE-RENAMER+ENV
- 'SCHEME::MAKE-RENAMER+ENV)
- (DEFUN SCAN-BODY
- (FORMS ENV)
- (DECLARE (SPECIAL CLASS/BEGIN
- DUMMY-FOR-DEFINE
- CLASS/DEFINE))
- (LET ((ENV@0 (NEW-ENVIRONMENT ENV)))
- (LABELS
- ((.LOOP (FORMS@1 SPECS)
- (WITH-VALUES #'(LAMBDA NIL
- (CLASSIFY (CAR FORMS@1)
- ENV@0))
- #'(LAMBDA (CLASS FORM ENV@2)
- (IF (= CLASS CLASS/DEFINE)
- (PROGN
- (DEFINE! ENV@2 (DEFINE-FORM-LHS FORM)
- DUMMY-FOR-DEFINE)
- (.LOOP (CDR FORMS@1)
- (CONS
- (LIST (DEFINE-FORM-LHS FORM)
- (DEFINE-FORM-RHS FORM) ENV@2)
- SPECS)))
- (IF (= CLASS CLASS/BEGIN)
- (.LOOP
- (APPEND (BEGIN-FORM-STATEMENTS FORM)
- (CDR FORMS@1))
- SPECS)
- (.VALUES (REVERSE SPECS) FORMS@1 ENV@2)))))))
- (.LOOP FORMS 'NIL))))
- (SCHI:SET-VALUE-FROM-FUNCTION 'SCAN-BODY
- 'SCHEME::SCAN-BODY)
- (LOCALLY (DECLARE (SPECIAL DUMMY-FOR-DEFINE))
- (SETQ DUMMY-FOR-DEFINE (MAKE-GENERATED 'SCHEME::UNDEFINED
- 0)))
- (SCHI:SET-FUNCTION-FROM-VALUE 'DUMMY-FOR-DEFINE
- 'SCHEME::DUMMY-FOR-DEFINE)
-